1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect;
18
19 import com.google.caliper.BeforeExperiment;
20 import com.google.caliper.Benchmark;
21 import com.google.caliper.Param;
22
23 import java.util.ArrayList;
24 import java.util.LinkedList;
25
26
27
28
29
30
31 public class IteratorBenchmark {
32 @Param({"0", "1", "16", "256", "4096", "65536"}) int size;
33
34
35 Object[] array;
36 ArrayList<Object> arrayList;
37 LinkedList<Object> linkedList;
38
39 @BeforeExperiment void setUp() {
40 array = new Object[size];
41 arrayList = Lists.newArrayListWithCapacity(size);
42 linkedList = Lists.newLinkedList();
43
44 for (int i = 0; i < size; i++) {
45 Object value = new Object();
46 array[i] = value;
47 arrayList.add(value);
48 linkedList.add(value);
49 }
50 }
51
52 @Benchmark int arrayIndexed(int reps) {
53 int sum = 0;
54 for (int i = 0; i < reps; i++) {
55 for (int index = 0; index < size; index++) {
56 sum += array[index].hashCode();
57 }
58 }
59 return sum;
60 }
61
62 @Benchmark int arrayIndexedLength(int reps) {
63 int sum = 0;
64 for (int i = 0; i < reps; i++) {
65 for (int index = 0; index < array.length; index++) {
66 sum += array[index].hashCode();
67 }
68 }
69 return sum;
70 }
71
72 @Benchmark int arrayFor(int reps) {
73 int sum = 0;
74 for (int i = 0; i < reps; i++) {
75 for (Object value : array) {
76 sum += value.hashCode();
77 }
78 }
79 return sum;
80 }
81
82 @Benchmark int arrayListIndexed(int reps) {
83 int sum = 0;
84 for (int i = 0; i < reps; i++) {
85 for (int index = 0; index < size; index++) {
86 sum += arrayList.get(index).hashCode();
87 }
88 }
89 return sum;
90 }
91
92 @Benchmark int arrayListIndexedLength(int reps) {
93 int sum = 0;
94 for (int i = 0; i < reps; i++) {
95 for (int index = 0; index < arrayList.size(); index++) {
96 sum += arrayList.get(index).hashCode();
97 }
98 }
99 return sum;
100 }
101
102 @Benchmark int arrayListFor(int reps) {
103 int sum = 0;
104 for (int i = 0; i < reps; i++) {
105 for (Object value : arrayList) {
106 sum += value.hashCode();
107 }
108 }
109 return sum;
110 }
111
112 @Benchmark int arrayListToArrayFor(int reps) {
113 int sum = 0;
114 for (int i = 0; i < reps; i++) {
115 for (Object value : arrayList.toArray()) {
116 sum += value.hashCode();
117 }
118 }
119 return sum;
120 }
121
122 @Benchmark int linkedListFor(int reps) {
123 int sum = 0;
124 for (int i = 0; i < reps; i++) {
125 for (Object value : linkedList) {
126 sum += value.hashCode();
127 }
128 }
129 return sum;
130 }
131
132 @Benchmark int linkedListToArrayFor(int reps) {
133 int sum = 0;
134 for (int i = 0; i < reps; i++) {
135 for (Object value : linkedList.toArray()) {
136 sum += value.hashCode();
137 }
138 }
139 return sum;
140 }
141 }